//
// Created by Jisam on 10/09/2024 9:02 PM.
// Solution of  P1535 [USACO08MAR] Cow Travelling S
// 2024-09-10 21:25:26 AC 100 DFS + 记忆化搜索
//#pragma GCC optimize(3)
#include <bits/stdc++.h>

using namespace std;
#define coutn(x) cout << (x) << "\n"
#define endl "\n"
#define PSI pair<string,int>
#define PII pair<int,int>
#define PDI pair<double,int>
#define PDD pair<double,double>
#define VVI vector<vector<int>>
#define VI vector<int>
#define VS vector<string>
#define PQLI priority_queue<int, vector<int>, less<int>>
#define PQGI priority_queue<int, vector<int>, greater<int>>
#define code_by_jisam ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
typedef long long i64;
typedef unsigned u32;
typedef unsigned long long u64;
typedef __int128 i128;

// 定义最大矩阵尺寸
const int MAXN = 105;
// 定义八个方向的横纵坐标变化量
int dx[] = {-1, 1, 0, 0, 1, 1, -1, -1,};
int dy[] = {0, 0, -1, 1, 1, -1, -1, 1,};
// 矩阵的行数、列数和移动步数
int n, m, t;
// 起始和目标位置的行、列坐标
int r1, c1, r2, c2;
// 矩阵存储每个位置的状态
char a[MAXN][MAXN];
// f数组用于缓存从(x, y)出发，移动k步到达(r2, c2)的方案数
int f[MAXN][MAXN][MAXN];

/**
 * 使用深度优先搜索找出从(x, y)出发，移动k步到达(r2, c2)的方案数
 * @param x 当前位置的行坐标
 * @param y 当前位置的列坐标
 * @param k 剩余移动步数
 * @return 从当前位置出发，移动k步到达目标位置的方案数
 */
int dfs(int x, int y, int k) {
    // 如果当前位置和剩余步数的方案数已经计算过，直接返回结果
    if (f[x][y][k] != -1) return f[x][y][k];
    // 如果没有剩余步数，判断是否到达目标位置
    if (k == 0) {
        if (x == r2 && y == c2) {
            // 如果到达目标位置，返回方案数为1
            return f[x][y][k] = 1;
        }
        // 如果未到达目标位置，返回方案数为0
        return f[x][y][k] = 0;
    }
    int tx, ty;
    int tmp = 0;
    // 遍历四个方向的邻居位置
    for (int i = 0; i < 4; i++) {
        tx = x + dx[i];
        ty = y + dy[i];
        // 如果邻居位置有效且不是障碍物，从该位置继续搜索
        if (tx >= 0 && ty >= 0 && tx < n && ty < m && a[tx][ty] != '*') {
            tmp += dfs(tx, ty, k - 1);
        }
    }
    // 缓存当前位置和剩余步数的方案数，并返回结果
    return f[x][y][k] = tmp;
}

/**
 * 解决方案函数
 * 读取输入，初始化数据，然后调用dfs函数计算并输出结果
 */
void solution() {
    // 读取矩阵的行数、列数和移动步数
    cin >> n >> m >> t;
    // 初始化f数组，标记所有位置和步数的方案数都未计算过
    memset(f, -1, sizeof f);
    // 读入矩阵每个位置的状态
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> a[i][j];
        }
    }
    // 读取起始和目标位置的行、列坐标
    cin >> r1 >> c1 >> r2 >> c2;
    // 将目标位置坐标调整为从0开始计数
    r2--;
    c2--;
    // 从起始位置开始搜索，移动t步到达目标位置的方案数
    cout << dfs(r1 - 1, c1 - 1, t);
}


int main() {
    code_by_jisam;
    i64 T = 1;
//    cin >> T;
    while (T--) {
        solution();
    }
    return 0;
}